home *** CD-ROM | disk | FTP | other *** search
- #include <Memory.h>
- #include <Resources.h>
- #include <GestaltValue.h>
- #include <Exceptions.h>
- #include <PLstringfuncs.h>
- #include <Folders.h>
- #include <TextUtils.h>
- #include <OSUtils.h>
- #include <GestaltEqu.h>
- #include <Files.h>
- #include "Common.h"
-
- #define BTstQ(arg, bitnbr) (arg & (1 << bitnbr))
-
- static void InsertItems(OriginalLinkPtr pb)
- {
- Handle temp;
- Str32 rName;
- short rID;
- OSType rType;
- OriginalLinkPtr newLink;
- short numTypes = Count1Resources('KILL');
-
- while (numTypes)
- {
- temp = Get1IndResource('KILL', numTypes);
- if (temp)
- {
- long size;
- GetResInfo(temp, &rID, &rType, rName);
- newLink = (OriginalLinkPtr) NewPtrSysClear(sizeof(OriginalLink));
- if ((size = GetHandleSize(temp)) == sizeof(long))
- {
- newLink->objectPrefs = *((long *) *temp);
- }
- else
- {
- newLink->objectPrefs = kLookupEnabled + kLookupAsync;
- }
- ReleaseResource(temp);
- if (!newLink) return;
- PLstrcpy(newLink->originalName, rName);
- pb->next = newLink;
- pb = pb->next;
- }
- numTypes--;
- }
- }
-
- static OSType InsertNames(OriginalLinkPtr pb)
- {
- Str255 theString;
- short refNum;
- FSSpec theFile;
- OSType theType = kDefaultSelector;
- long gesResponse;
-
- FindFolder(-1, kPreferencesFolderType, true, &theFile.vRefNum, &theFile.parID);
- GetIndString(theString, kPrefsName, 1);
- if (!theString[0])
- {
- PLstrcpy(theFile.name, "\pIncognito Prefs");
- }
- PLstrcpy(theFile.name, theString);
-
- // are FS Calls available?
- if ((!Gestalt (gestaltFSAttr, &gesResponse) && BTstQ (gesResponse, gestaltHasFSSpecCalls)))
- {
- refNum = FSpOpenResFile(&theFile, fsRdPerm);
- if (refNum == -1)
- {
- FSpCreateResFile(&theFile, theType, 'pref', 0);
- refNum = FSpOpenResFile(&theFile, fsRdPerm);
- }
- else
- {
- FInfo theInfo;
-
- FSpGetFInfo(&theFile, &theInfo);
- theType = theInfo.fdCreator;
- }
- }
- else
- {
- refNum = HOpenResFile(theFile.vRefNum, theFile.parID, theFile.name, fsRdPerm);
- if (refNum == -1)
- {
- HCreateResFile(theFile.vRefNum, theFile.parID, theFile.name);
- refNum = -1;
- }
- else
- {
- FInfo theInfo;
- if (!HGetFInfo(theFile.vRefNum, theFile.parID, theFile.name, &theInfo))
- theType = theInfo.fdCreator;
- }
- }
- if (refNum != -1)
- {
- InsertItems(pb);
- CloseResFile(refNum);
- }
- return theType;
- }
-
- OSType Initialize(long *theResult)
- {
- OSErr error;
- MyGestaltPtr pb;
- NameLinkPtr pc;
- OriginalLinkPtr pd;
- OSType theType;
- SysEnvRec theWorld;
-
- *theResult = 0;
-
- SysEnvirons(1, &theWorld);
- if (theWorld.systemVersion < 0x0605) return 0; // system 6!
-
- pb = (MyGestaltPtr)NewPtrSysClear(sizeof(MyGestaltRecord));
- require(pb, mygestalt);
-
- pc = (NameLinkPtr)NewPtrSysClear(sizeof(NameLink));
- require(pc, namelink);
-
- pd = (OriginalLinkPtr)NewPtrSysClear(sizeof(OriginalLink));
- require(pd, origlink);
-
- pb->registeredNames = pc;
- pb->trappedNames = pd;
-
- theType = InsertNames(pd);
-
- *theResult = (long)pb;
-
- return theType;
-
- origlink:
- DisposePtr((Ptr) pc);
- namelink:
- DisposePtr((Ptr) pb);
- mygestalt:
- return 0;
- }